/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.cip.esymons.general.be;

import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.Transient;
import org.cip.esymons.colegiatura.be.ExperienciaLaboral;
import org.cip.esymons.eventos.be.DirectorioInvitacion;
import org.cip.esymons.tesoreria.be.CobroPlanilla;
import org.cip.esymons.tesoreria.be.CuentaBancaria;
import org.cip.esymons.tesoreria.be.DelegadoAcotacion;

/**
 *
 * @author oscar
 */
@Entity
@Table(name = "gen_persona_juridica")
@DiscriminatorValue("PJ")
@PrimaryKeyJoinColumn(name = "emp_codigo", referencedColumnName = "sol_codigo")
//@NamedQueries({@NamedQuery(name = "PersonaJuridica.findAll", query = "SELECT p FROM PersonaJuridica p"), @NamedQuery(name = "PersonaJuridica.findByEmpCodigo", query = "SELECT p FROM PersonaJuridica p WHERE p.empCodigo = :empCodigo"), @NamedQuery(name = "PersonaJuridica.findByEmprazonSocial", query = "SELECT p FROM PersonaJuridica p WHERE p.emprazonSocial = :emprazonSocial"), @NamedQuery(name = "PersonaJuridica.findByEmpRepresentante", query = "SELECT p FROM PersonaJuridica p WHERE p.empRepresentante = :empRepresentante")})

public class PersonaJuridica extends Solicitante implements Serializable {
    private static final long serialVersionUID = 1L;
   
    @Basic(optional = false)
    @Column(name = "emp_razonSocial",length = 100)
    private String emprazonSocial;
    @Basic(optional = false)
    @Column(name = "emp_representante")
    private String empRepresentante;
    @Basic(optional = false)
    @Column(name = "emp_esBanco")
    private Boolean empEsBanco;

    @Transient
    private Boolean seleccion;

    @JoinColumn(name = "rub_codigo", referencedColumnName = "rub_codigo")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Rubro rubCodigo;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkBanCodigo", fetch = FetchType.LAZY)
    private List<CuentaBancaria> cuentaBancariaList;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "empCodigo", fetch = FetchType.LAZY)
    private List<ExperienciaLaboral> listaExpLaboral;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "empresaOInstitucion", fetch = FetchType.LAZY)
    private List<CobroPlanilla> listaCobrosPorPlanilla;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "empCodigo", fetch = FetchType.LAZY)
    private List<DelegadoAcotacion> listaDelegadoAcotaciones;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "empCodigo", fetch = FetchType.LAZY)
    private List<DirectorioInvitacion> listaDirectorioInvitacion;


    public PersonaJuridica() {
    }

    public PersonaJuridica(Long empCodigo) {
        this.solCodigo = empCodigo;
    }

    public PersonaJuridica(Long empCodigo, String emprazonSocial, String empRepresentante) {
        this.solCodigo = empCodigo;
        this.emprazonSocial = emprazonSocial;
        this.empRepresentante = empRepresentante;
    }

     public String getEmprazonSocial() {
        return emprazonSocial;
    }

    public void setEmprazonSocial(String emprazonSocial) {
        this.emprazonSocial = emprazonSocial;
    }

    public String getEmpRepresentante() {
        return empRepresentante;
    }

    public void setEmpRepresentante(String empRepresentante) {
        this.empRepresentante = empRepresentante;
    }

   
    public Rubro getRubCodigo() {
        return rubCodigo;
    }

    public void setRubCodigo(Rubro rubCodigo) {
        this.rubCodigo = rubCodigo;
    }


    public List<ExperienciaLaboral> getListaExpLaboral() {
        return listaExpLaboral;
    }

    public void setListaExpLaboral(List<ExperienciaLaboral> listaExpLaboral) {
        this.listaExpLaboral = listaExpLaboral;
    }

    public List<DirectorioInvitacion> getListaDirectorioInvitacion() {
        return listaDirectorioInvitacion;
    }

    public void setListaDirectorioInvitacion(List<DirectorioInvitacion> listaDirectorioInvitacion) {
        this.listaDirectorioInvitacion = listaDirectorioInvitacion;
    }

    public Boolean getSeleccion() {
        return seleccion;
    }

    public void setSeleccion(Boolean seleccion) {
        this.seleccion = seleccion;
    }

    


    @Override
    public int hashCode() {
        int hash = 0;
        hash += (solCodigo != null ? solCodigo.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof PersonaJuridica)) {
            return false;
        }
        PersonaJuridica other = (PersonaJuridica) object;
        if ((this.solCodigo == null && other.solCodigo != null) || (this.solCodigo != null && !this.solCodigo.equals(other.solCodigo))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "org.cip.esymons.general.be.PersonaJuridica[empCodigo=" + solCodigo + "]";
    }

    /**
     * @return the cuentaBancariaList
     */
    public List<CuentaBancaria> getCuentaBancariaList() {
        return cuentaBancariaList;
    }

    /**
     * @param cuentaBancariaList the cuentaBancariaList to set
     */
    public void setCuentaBancariaList(List<CuentaBancaria> cuentaBancariaList) {
        this.cuentaBancariaList = cuentaBancariaList;
    }

    /**
     * @return the empEsBanco
     */
    public Boolean getEmpEsBanco() {
        return empEsBanco;
    }

    /**
     * @param empEsBanco the empEsBanco to set
     */
    public void setEmpEsBanco(Boolean empEsBanco) {
        this.empEsBanco = empEsBanco;
    }

    /**
     * @return the listaCobrosPorPlanilla
     */
    public List<CobroPlanilla> getListaCobrosPorPlanilla() {
        return listaCobrosPorPlanilla;
    }

    /**
     * @param listaCobrosPorPlanilla the listaCobrosPorPlanilla to set
     */
    public void setListaCobrosPorPlanilla(List<CobroPlanilla> listaCobrosPorPlanilla) {
        this.listaCobrosPorPlanilla = listaCobrosPorPlanilla;
    }

    /**
     * @return the listaDelegadoAcotaciones
     */
    public List<DelegadoAcotacion> getListaDelegadoAcotaciones() {
        return listaDelegadoAcotaciones;
    }

    /**
     * @param listaDelegadoAcotaciones the listaDelegadoAcotaciones to set
     */
    public void setListaDelegadoAcotaciones(List<DelegadoAcotacion> listaDelegadoAcotaciones) {
        this.listaDelegadoAcotaciones = listaDelegadoAcotaciones;
    }

}
